package com.anti.modular.sys.user.service;

import cn.hutool.core.lang.Dict;
import com.anti.jdbc.support.page.PageParam;
import com.anti.jdbc.support.page.PageResult;
import com.anti.modular.sys.user.param.SysUserParam;
import com.anti.modular.sys.user.entity.SysUser;
import com.anti.modular.sys.user.pojo.result.SysUserResult;

import java.util.List;

/**
 * @Description TODO
 * @Author anTi
 * @Date 2021-2-24
 */
public interface SysUserService {

   PageResult page(PageParam pageParam, SysUserParam sysUserParam);

    /**
     * 增加系统用户
     * @param sysUserParam 添加参数
     */
    void add(SysUserParam sysUserParam);

    /**
     * 删除系统用户
     * @param sysUserParam 删除参数
     */
    void delete(SysUserParam sysUserParam);

    /**
     * 编辑系统用户
     * @param sysUserParam 编辑参数
     */
    void edit(SysUserParam sysUserParam);

    /**
     * 查看系统用户
     * @param sysUserParam 查看参数
     * @return 用户结果集
     */
    SysUserResult detail(SysUserParam sysUserParam);

    /**
     * 修改状态
     * @param sysUserParam 修改参数
     */
    void saveChangeStatus(SysUserParam sysUserParam);

    /**
     * 授权角色
     * @param sysUserParam 授权参数
     */
    void saveGrantRole(SysUserParam sysUserParam);

    /**
     * 授权数据
     * @param sysUserParam 授权参数
     */
    void saveGrantData(SysUserParam sysUserParam);

    /**
     * 更新信息
     * @param sysUserParam 更新参数
     */
    void updateInfo(SysUserParam sysUserParam);

    /**
     * 修改密码
     * @param sysUserParam 修改密码参数
     */
    void updatePwd(SysUserParam sysUserParam);

    /**
     * 拥有角色
     * @param sysUserParam 查询参数
     * @return 角色id集合
     */
    List<Long> ownRole(SysUserParam sysUserParam);

    /**
     * 拥有数据
     * @param sysUserParam 查询参数
     * @return 数据范围id集合
     */
    List<Long> ownData(SysUserParam sysUserParam);

    /**
     * 重置密码
     * @param sysUserParam 重置参数
     */
    void saveResetPwd(SysUserParam sysUserParam);

    /**
     * 修改头像
     * @param sysUserParam 修改头像参数
     */
    void updateAvatar(SysUserParam sysUserParam);

    /**
     * 用户选择器
     * @param sysUserParam 查询参数
     * @return 用户列表集合，格式[{"id":123,"name":"张三"},{"id":456,"name":"李四"}]
     */
    List<Dict> selector(SysUserParam sysUserParam);
    /**
     * 根据账号获取用户
     * @param account
     * @return 用户
     */
    SysUser getUserByCount(String account);

    SysUser getById(Long userId);

    /**
     * 获取用户的数据范围（组织机构id集合）
     * @param userId 用户id
     * @param orgId  组织机构id
     * @return 数据范围id集合（组织机构id集合）
     */
    List<Long> getUserDataScopeIdList(Long userId, Long orgId);


   /**
    * 根据用户id获取姓名
    * @param userId 用户id
    * @return 用户姓名
    */
   String getNameByUserId(Long userId);

}
